﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;
using System.Data.SqlClient;

namespace DataLayer
{
    public static class DatTarjeta
    {
        public static int InsertTarjeta(dsBoleto.TarjetaRow rTarjeta)
        {
            Util.DBParameter NumeroTarjeta;
            Util.DBParameter IdCliente;
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            NumeroTarjeta.dbType = System.Data.DbType.Int32;
            NumeroTarjeta.parameterName = "@NumeroTarjeta";
            NumeroTarjeta.value = rTarjeta.NumeroTarjeta;
            parameters.Add(NumeroTarjeta);

            IdCliente.dbType = System.Data.DbType.Int32;
            IdCliente.parameterName = "@IdCliente";
            IdCliente.value = rTarjeta.IdCliente;
            parameters.Add(IdCliente);

            SqlCommand miCommand = Util.SQLCommandBuild("TarjetaInsert", parameters);

            return int.Parse(miCommand.ExecuteScalar().ToString());
        }

        public static void UpdateTarjeta(dsBoleto.TarjetaRow rTarjeta)
        {
            Util.DBParameter IdTarjeta;
            Util.DBParameter NumeroTarjeta;
            Util.DBParameter IdCliente;
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            IdTarjeta.dbType = System.Data.DbType.Int32;
            IdTarjeta.parameterName = "@IdTarjeta";
            IdTarjeta.value = rTarjeta.IdTarjeta;
            parameters.Add(IdTarjeta);

            NumeroTarjeta.dbType = System.Data.DbType.Int32;
            NumeroTarjeta.parameterName = "@NumeroTarjeta";
            NumeroTarjeta.value = rTarjeta.NumeroTarjeta;
            parameters.Add(NumeroTarjeta);

            IdCliente.dbType = System.Data.DbType.Int32;
            IdCliente.parameterName = "@IdCliente";
            IdCliente.value = rTarjeta.IdCliente;
            parameters.Add(IdCliente);

            SqlCommand miCommand = Util.SQLCommandBuild("TarjetaUpdate", parameters);

            miCommand.ExecuteNonQuery();
        }

        public static void DeleteTarjeta(int idTarjeta)
        {
            Util.DBParameter IdTarjeta;

            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            IdTarjeta.dbType = System.Data.DbType.Int32;
            IdTarjeta.parameterName = "@IdTarjeta";
            IdTarjeta.value = idTarjeta;
            parameters.Add(IdTarjeta);

            SqlCommand miCommand = Util.SQLCommandBuild("TarjetaDelete", parameters);

            miCommand.ExecuteNonQuery();
        }

        public static dsBoleto getTarjeta(int idTarjeta)
        {
            //Cargo el Parametro en el manejador de params SQL.-
            Util.DBParameter IdTarjeta;
            IdTarjeta.dbType = System.Data.DbType.Int32;
            IdTarjeta.parameterName = "@IdTarjeta";
            IdTarjeta.value = idTarjeta;


            //Genero el SQLCommando con el Util Builder
            SqlCommand este = Util.SQLCommandBuild("TarjetaGet", IdTarjeta);

            ///Genero el listado de tablas a donde cargar esta data.
            ///Quizas hay tablas innecesarias pero que vienen en el query...
            ///Se mandan igual para que no falle la consulta.
            List<string> Tablas = new List<string>();
            Tablas.Add("Tarjeta");
            Tablas.Add("Cliente");


            return Util.SelectSPtoDatasetSolve(este, Tablas.ToArray());





            ////Genero el SQLCommando con el Util Builder
            //SqlCommand sc = Util.SQLCommandBuild("TarjetaGet", IdTarjeta);

            //using (SqlDataReader dr = sc.ExecuteReader())
            //{

            //    Util.DSBoleto = new dsBoleto();
            //    while (dr.Read())
            //    {
            //        dsBoleto.TarjetaRow row = Util.DSBoleto.Tarjeta.NewTarjetaRow();
            //        row.IdTarjeta = dr.GetInt32(0);
            //        row.NumeroTarjeta = dr.GetInt32(1);
            //        row.FechaAlta = dr.GetDateTime(2);
            //        row.IdCliente = dr.GetInt32(3);
            //        //row.ClienteDescripcion = dr.GetString(4);
            //        row.Credito= dr.GetDouble(5);
            //        row.Habilitado = dr.GetBoolean(6);
      


            //        Util.DSBoleto.Tarjeta.AddTarjetaRow(row);
            //    }
            //}
            //return Util.DSBoleto;
        }

        public static dsBoleto getTarjetas(int numeroTarjeta, DateTime? fechaAlta, int idCliente)
        {
            if (Util.DSBoleto == null)
                Util.DSBoleto = new dsBoleto();

            Util.DSBoleto.Cliente.Clear();
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            //Cargo el Parametro en el manejador de params SQL.-
            Util.DBParameter NumeroTarjeta;
            NumeroTarjeta.dbType = System.Data.DbType.String;
            NumeroTarjeta.parameterName = "@NumeroTarjeta";
            NumeroTarjeta.value = numeroTarjeta;
            parameters.Add(NumeroTarjeta);

            Util.DBParameter FechaAlta;
            FechaAlta.dbType = System.Data.DbType.DateTime;
            FechaAlta.parameterName = "@FechaAlta";
            FechaAlta.value = fechaAlta;
            parameters.Add(FechaAlta);

            Util.DBParameter IdCliente;
            IdCliente.dbType = System.Data.DbType.String;
            IdCliente.parameterName = "@IdCliente";
            IdCliente.value = idCliente;
            parameters.Add(IdCliente);

            //Genero el SQLCommando con el Util Builder
            SqlCommand sc = Util.SQLCommandBuild("TarjetaSearch", parameters);




            using (SqlDataReader dr = sc.ExecuteReader())
            {
                if (Util.DSBoleto == null)
                    Util.DSBoleto = new dsBoleto();


                Util.DSBoleto.Tarjeta.Clear();

                while (dr.Read())
                {
                    dsBoleto.TarjetaRow row = Util.DSBoleto.Tarjeta.NewTarjetaRow();
                    row.IdTarjeta = dr.GetInt32(0);
                    row.NumeroTarjeta = dr.GetInt32(1);
                    row.FechaAlta = dr.GetDateTime(2);
                    row.IdCliente = dr.GetInt32(3);
                    //row.ClienteDescripcion = dr.GetString(4);
                    row.Credito = dr.GetDouble(5);
                    row.Habilitado = dr.GetBoolean(6);
      

                    Util.DSBoleto.Tarjeta.AddTarjetaRow(row);
                }
            }


            return Util.DSBoleto;
        }

        public static dsBoleto getTarjetasInactivas()
        {
            SqlCommand este = Util.SQLCommandBuild("InactividadTarjetasGet");

            ///Genero el listado de tablas a donde cargar esta data.
            List<string> Tablas = new List<string>();
            Tablas.Add("Cliente");

            return Util.SelectSPtoDatasetSolve(este, Tablas.ToArray());
        }
    }
}
